package ui.Text;
/*
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.util.Scanner;
import logicGame.Game;
import logicGame.States.*;
//fazer import de estados

public class UIText {

    private Game game;
    private boolean exit, flag, load;
    private Scanner sc;

    UIText() {
        sc = new Scanner(System.in);
        game = null;
        flag = false;
        exit = false;
        load = false;
    }

    void run() {

        while (!load) {
            System.out.println("Bem Vindo!\nDeseja iniciar um jogo novo - 1\nCarregar um jogo do Ficheiro -2");
            while (!sc.hasNextInt());
            int op = sc.nextInt();
            if (op == 1) {
                game = new Game();
                load = true;
            } else if (op == 2) {
                System.out.println("Introduza o nome do ficheiro");
                String fileName;
                while (!sc.hasNext());
                fileName = sc.next();
                loadGame(fileName);
                load = true;
            } else {
                System.out.println("Opçao Incorrecta");
            }
        }

        while (!exit) {
            State state = game.getState();

            if (state == null) {
                uiGameOver();
                game.endGame();
                exit = true;
            } else if (state instanceof Setup) {
                uiSetup();
            } else if (state instanceof Auction) {
                uiAuction();
            } else if (state instanceof BuyCard) {
                uiBuyCard();
            } else if (state instanceof PickPlace) {
                uiPickPlace();
            } else if (state instanceof PickArmy) {
                uiPickArmy();
            } else if (state instanceof And) {
                uiAnd();
            } else if (state instanceof Or) {
                uiOr();
            }
        }

    }

    void uiSetup() {
        System.out.println("Bem vindo! " + "Numero de Jogadores "
                + game.getnPlayers() + "\n");
        while (true) {
            System.out.println("\nSair do jogo - 0\nDefine numero de jogadores - 1"
                    + "\nDefine nome do jogador - 2\nComeçar Jogo - 3");
            char input = ' ';

            input = sc.next().charAt(0);
            if (input == '0') {
                exit = true;
                return;
            }
            if (input == '1') {//Define nPlayers
                this.game = new Game();
                System.out.println("Numero de Jogadores: (2 a 5)");
                while (!sc.hasNextInt());
                int x = sc.nextInt();
                if (x > 5 || x < 2) {
                    System.out.println("Numero de jogadores inválidos");
                } else {
                    game.setnPlayers(x);
                    flag = true;
                }
                return;
            }

            if (flag) {//check if number of players was defined

                if (input == '2') {// Define Player name
                    System.out.println("Numero e Nome do Jogador: ");
                    while (!sc.hasNextInt());
                    int num = sc.nextInt();
                    String name = sc.next();
                    game.changePlayerName(num - 1, name);
                    return;
                }

                if (input == '3') {// Start game
                    System.out.println("Começar Jogo: ");
                    game.start();
                    return;
                }

            } else {
                System.out.println("Defina Primeiro o numero de jogadores");
            }
        }
    }

    void uiAuction() {
        int coins = 0;
        
        do {
            System.out.println("Jogador " + game.getActivePlayer().getName() + " tem " + game.getActivePlayer().getCoin() + " moedas, quantas moedas aposta? ");

            while (!sc.hasNextInt());
            coins = sc.nextInt();
            if (game.getActivePlayer().getCoin() < coins) {
                System.out.println("Não tem moedas suficientes");
            }
        } while (coins > game.getActivePlayer().getCoin());
        game.bet(coins);

        if (game.getState() instanceof BuyCard) {
            System.out.println("\nParabéns " + game.getActivePlayer().getName() + " ganhou!");
        }
    }

    void uiBuyCard() {
        System.out.println(game.getBoard().toString(game.getPlayers()));
        System.out.println(game.getActivePlayer());
        System.out.println(game.getBoardDeck());
        System.out.println("Qual o numero da carta que escolhe? (para sair do jogo - 0)");
        int pick;
        flag = false;

        do {
            while (!sc.hasNextInt());
            pick = sc.nextInt();

            if (pick == 0) {
                System.out.println("Deseja gravar o jogo? 0-cancelar, 1-sim, 2-não");
                int op;

                do {
                    while (!sc.hasNextInt());
                    op = sc.nextInt();
                } while (op > 2 || op < 0);
                if (op == 0) {
                    return;
                } else if (op == 1) {
                    System.out.println("Introduz o nome do fich: ");
                    while (!sc.hasNext());
                    String name = sc.next();
                    game.saveGame(name);
                }
                exit = true;

                return;

            } else if (pick > 6 || pick < 0) {
                System.out.println("Introduza um numero válido! Escolha outra carta");

            } else if (!game.getActivePlayer().checkCash(pick)) {
                System.out.println("Não tem moedas suficientes! Escolha outra carta");

            } else {
                flag = true;
            }
        } while (!flag);
        game.buyCard(pick - 1);

        
        System.out.println("");
        System.out.println(game.getActivePlayer().getLastCard().getDescrition());
        System.out.println("\nDeseja Realizar a ação da carta?\n1- sim  2- não(proximo jogador)");
        flag = false;
        
        do {

            while (!sc.hasNextInt());
            pick = sc.nextInt();
            if (pick > 2 || pick < 1) {
                System.out.println("Introduza um numero válido!");
            } else {
                flag = true;
            }
        } while (!flag);

        if (pick == 1) {
            game.choice();
        } else {
            game.proxPlayer();
        }
    }

    void uiPickPlace() {
        System.out.println(game.getBoard().toString(game.getPlayers()));
        System.out.println("");
        int finish, start = -1;
        boolean flag = false;

        switch (game.getActivePlayer().getLastCard().getCode()) {

            case (0):
                System.out.println("Jogador " + game.getActivePlayer().getName() + " escolha um território: ()");
                do {
                    while (!sc.hasNextInt());
                    finish = sc.nextInt();
                    System.out.println("");

                    if (game.checkAction(start, finish)) {
                        game.doAction(start, finish);
                        flag = true;
                    } else {
                        System.out.println("Nao pode escolher esse território. Escolha outro.");
                    }
                } while (!flag);

                break;

            //mover exercito precisa de 2 entradas
            case (1):
                do {
                    System.out.println("Jogador " + game.getActivePlayer().getName() + " escolha o sitio do exército a mover: ");
                    while (!sc.hasNextInt());
                    start = sc.nextInt();

                    System.out.println("Jogador " + game.getActivePlayer().getName() + " escolha um territorio para mover: ");
                    while (!sc.hasNextInt());
                    finish = sc.nextInt();

                    if (game.checkAction(start, finish)) {
                        game.doAction(start, finish);
                        flag = true;
                    } else {
                        System.out.println("Nao pode escolher esse território. Escolha outro.");
                    }
                } while (!flag);

                break;
        }
    }

    void uiPickArmy() {
        System.out.println(game.getBoard().troopToString(game.getPlayers(), game.getPlace()));
        flag = false;
        do {
            System.out.println("Escolha o nome do jogador do qual quer eliminar o exercito:");
            while (!sc.hasNextLine());
            String str = sc.nextLine();
            int i;
            for (i = 0; i < game.getPlayers().size(); i++) {
                if (game.getPlayer(i).getName().equals(str)) {
                    break;
                }
            }
            if (i == game.getPlayers().size()) {
                System.out.println("\nJogador não existe\n");
            } else if (game.getBoard().checkArmyPresence(game.getPlayer(i), game.getPlace())) {
                game.chooseArmy(game.getPlayer(i));
                flag = true;
            } else {
                System.out.println("\nJogador escolhido não tem exercitos neste local\n");
            }
        } while (!flag);

    }

    void uiAnd() {
        System.out.println(game.getActivePlayer().getLastCard().getDescrition());
        if (game.getActivePlayer().getLastCard().getTimes() < 1) {
            System.out.println("Que ação dejesa realisar primeiro?(0-cancelar, 1-primeira, 2-segunda)");
            int pick;
            flag = false;

            do {
                while (!sc.hasNextInt());
                pick = sc.nextInt();
                if (pick > 3 || pick < 0) {
                    System.out.println("Introduza um numero válido!");
                } else {
                    flag = true;
                }
            } while (!flag);

            if (pick == 0) {
                game.proxPlayer();
            } else {
                game.chooseAction(pick);
            }

        } else {

            System.out.println("\nQue ação dejesa realisar?(0-cancelar, 1-primeira, 2-segunda)");
            System.out.println("Já Realizaoua ação " + game.getActivePlayer().getLastCard().getOp() + " logo apenas pode escolher a outra");

            int pick;
            flag = false;

            do {
                while (!sc.hasNextInt());
                pick = sc.nextInt();
                if (pick > 3 || pick < 0 || pick == game.getActivePlayer().getLastCard().getOp()) {
                    System.out.println("Introduza um numero válido!");
                } else {
                    flag = true;
                }
            } while (!flag);

            if (pick == 0) {
                game.proxPlayer();
            } else {
                game.chooseAction(pick);
            }

        }
    }

    void uiOr() {
        System.out.println(game.getActivePlayer().getLastCard().getDescrition());
        System.out.println("Deseja realizar qual ação?(0-cancelar, 1-primeira, 2-segunda)");

        int pick;
        flag = false;
        do {
            while (!sc.hasNextInt());
            pick = sc.nextInt();

            if (pick > 2 || pick < 0) {
                System.out.println("Introduza um numero válido!");
            } else {
                flag = true;
            }
        } while (!flag);
        if (pick == 0) {
            game.proxPlayer();
        } else {
            game.chooseAction(pick);
        }

    }

    void uiGameOver() {
        System.out.println("Acabou o jogo");
        int pick;

        for (int i = 0; i < game.getPlayers().size(); i++) {

            while (game.getPlayer(i).getJoker() > 0) {
                System.out.println("\n" + game.getPlayer(i) + " , que recurso pretende usar para trocar o Joker?");
                System.out.println("1- Joias, 2- Ferro, 3- Madeira, 4- Alimentos, 5- Utensilios");
                flag = false;

                do {
                    while (!sc.hasNextInt());
                    pick = sc.nextInt();
                    if (pick > 5 || pick < 1) {
                        System.out.println("Introduza um numero válido!");
                    } else {
                        flag = true;
                    }
                } while (!flag);
                game.getPlayer(i).convertJoker(pick);
            }
        }
        System.out.println(game.endGame());
        System.out.println(game.scoreToString());
    }

    public void loadGame(String fileName) {

        try {
            FileInputStream saveGame = new FileInputStream(fileName + ".save");

            ObjectInputStream reader = new ObjectInputStream(saveGame);
            try {

                game = (Game) reader.readObject();

            } catch (ClassNotFoundException e) {
                System.out.println("Classe não existe");
            }

        }catch(FileNotFoundException e){
            System.out.println("Ficheiro não encontrado");
        }
        catch (IOException e) {
            e.printStackTrace();
        }
    }
    
}
*/